import ChatTTS
from IPython.display import Audio

chat = ChatTTS.Chat()
chat.load_models(compile=False) # Set to True for better performance

texts = ["函数可以接受一个或多个参数，每个参数都是一个 Python 对象。它会自动根据对象的类型选择合适的显示方式"] # 文本内容

# 说话人采样：从高斯分布随机采样一个[1, 768]的 speaker embedding，与生成语音的音色有关
rand_spk = chat.sample_random_speaker()

"""
refine_text的参数设置，影响文本的口语化
"""
params_refine_text = {
    'prompt': '[oral_2][laugh_0][break_6]',
    'top_P': 0.7,
    'top_K': 20,
    'temperature': 0.7,
    'repetition_penalty': 1.0,
    'max_new_token': 384
}

# infer_code的参数设置，控制语音的生成
params_infer_code = {
    'spk_emb': rand_spk, # 设置说话人
    'temperature': .3,
    'top_P': 0.7,
    'top_K': 20,
}

# skip_refine_text控制是否添加口语化表达。若设置为 false，不走refine_text，params_refine_text不生效
wav = chat.infer(texts, skip_refine_text=True, params_refine_text=params_refine_text, params_infer_code=params_infer_code)

# torchaudio.save("output.wav", torch.from_numpy(wavs[0]), 24000)